home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: New Zealand Amiga Users Group
/
New Zealand Amiga Users Group Newsdisk v03 (1987-02)(NZAmigaUG).zip
/
New Zealand Amiga Users Group Newsdisk v03 (1987-02)(NZAmigaUG).adf
/
BASIC
/
ScapeGen32
< prev
next >
Wrap
Text File
|
1993-12-02
|
3KB
|
81 lines
REM FRACTAL LANDSCAPES with SOLID SURFACE by G Thornton
CLEAR ,50000&
SCREEN 1,320,200,5,1
WINDOW 2,"Fractal landscapes MkII [<RETURN>=exit]",,0,1
RANDOMIZE TIMER: COLOR 11,2
DIM d%(128,128)
FOR i=0 TO 31:READ r,g,b:PALETTE i,r/15,g/15,b/15:NEXT
DATA 15,7,0,0,6,15,14,13,9,13,12,4,8,7,5,0,9,7,7,11,7,6,10,0,8,12,0
DATA 5,8,3,3,7,6,4,7,0,0,5,3,6,7,0,0,6,1,6,8,0,5,7,0,7,6,4
DATA 4,5,2,6,5,4,5,4,0,6,5,0,6,6,0,8,6,0,7,6,5,8,7,5,7,7,3
DATA 8,6,5,10,9,7,13,13,13,11,11,11,15,15,15
water=-200:sea=1
30 INPUT "Number of levels <1-7> ";le: IF le < 1 OR le > 7 THEN 30
INPUT "Variable smoothness (Y/N)";smoo$
IF LEFT$(UCASE$(smoo$),1)="Y" THEN hill=1 ELSE hill=0
IF hill=0 THEN INPUT "Enter smoothness (1.5 - 2.5) :",Sm
40 mx=2^le
60 FOR n=1 TO le: IF hill=0 THEN l=15000/Sm^n
70 PRINT : PRINT "Working on level ";n
80 ib=mx/2^n:sk=ib*2
90 GOSUB 150: ' *** Assign heights along X in array ***
100 GOSUB 220: ' *** Assign heights along Y in array ***
110 GOSUB 290: ' *** Assign heights along diag. in array ***
120 NEXT n
IF sea=0 THEN 130
FOR i=0 TO mx :FOR j=0 TO mx
IF d%(i,j)<water THEN d%(i,j)=water ELSE IF d%(i,j)>maxz THEN maxz=d%(i,j)
NEXT j,i
130 GOTO 640: ' *** Draw ***
' *** Heights along x ***
150 FOR ye = 0 TO mx STEP sk
IF hill=1 THEN l=15000/(1.3+le/20+(ye/mx*(.8-le/20)))^n
FOR xe = ib TO mx STEP sk
d%(xe,ye)=(d%(xe-ib,ye)+d%(xe+ib,ye))/2+ RND*l/2 - l/4
NEXT xe
NEXT ye: RETURN
' *** Heights along Y ***
220 FOR ye = ib TO mx STEP sk
IF hill=1 THEN l=15000/(1.3+le/20+(ye/mx*(.8-le/20)))^n
FOR xe = 0 TO mx STEP sk
d%(xe,ye)=(d%(xe,ye-ib)+d%(xe,ye+ib))/2+ RND * l/2 - l/4
NEXT xe
NEXT ye: RETURN
' *** Heights along diag. ***
290 sq2=SQR(2)
FOR ye = ib TO mx STEP sk
IF hill=1 THEN l=15000/(1.3+le/20+(ye/mx*(.8-le/20)))^n
FOR xe = ib TO mx STEP sk
d%(xe,ye)=(d%(xe-ib,ye+ib)+d%(xe+ib,ye-ib))/2+RND(1)*l/sq2-l/sq2/2
NEXT xe
NEXT ye: RETURN
630 ' **** Display here ****
640 GOSUB 1100: ' *** Set up plotting device or screen ***
xa=35/mx/mx: ys = 120/mx: yc=50:zs=yc/maxz*.85: ' *** scaling factors ***
FOR ay = 0 TO mx-1 :ays=ay*ys+yc:xs=(270+35*ay/mx)/mx
FOR ax = 0 TO mx-1 :axs=ax*xs:ax1=axs+xs
z1=d%(ax,ay):z2=d%(ax,ay+1):z3=d%(ax+1,ay)
GOSUB Tricolour :ay2=ays+ys-z2*zs:ay3=ays-z3*zs
AREA(axs,ays-z1*zs):AREA(axs+xa*ax,ay2):AREA(ax1,ay3):AREAFILL
z1=d%(ax+1,ay+1):GOSUB Tricolour
AREA(ax1+xa*(ax+1),ays+ys-z1*zs):AREA(axs,ay2):AREA(ax1,ay3):AREAFILL
NEXT ax,ay
GOTO 1130: ' *** done plotting, goto end loop ***
Tricolour: height=(z1+z2+z3)/3 - water:IF height<10 THEN COLOR 1:RETURN
hi=INT(height/maxz*10+RND*.4):IF hi>9 THEN hi=9
slp=INT(RND*2.99)
COLOR 2+slp+hi*3
RETURN
1100 ' * * * setup plotting device or screen * * *
1110 CLS: LINE (0,0)-(310,190),0,bf: RETURN
1120 ' *** End loop ***
1130 '
1140 INPUT "",e$
SCREEN CLOSE 1
END